// Copyright (c) 2022 Presto labs Pte. Ltd.
// Author: junglekim

#pragma once

#include "coin2/strategy/vmm/vmm_arbitrageur.h"
#include "coin2/strategy/vmm/vmm_order_controller.h"
#include "coin2/strategy/vmm/vmm_order_controller2.h"
#include "coin2/strategy/vmm/vmm_pricer.h"
#include "coin2/strategy/vmm/vmm_pricer2.h"

namespace coin2::strategy::vmm {

std::unique_ptr<VmmPricer> CreateNewVmmPricer(
    const ::nlohmann::json& pricer_config,
    const bool& avoid_arbi,
    const bool& verbose);

std::unique_ptr<VmmOrderController> CreateNewVmmOrderController(
    const ::nlohmann::json& oc_config,
    const bool& dry_run,
    const int64_t& start_time,
    const bool& verbose);

std::unique_ptr<VmmArbitrageur> CreateNewVmmArbitrageur(
    const ::nlohmann::json& arbi_config,
    const bool& dry_run,
    const bool& verbose);
}  // namespace coin2::strategy::vmm